builder-tool: Convert former bin children
authorMatthias Clasen <mclasen@redhat.com>
Fri, 1 May 2020 22:02:46 +0000 (18:02 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 5 May 2020 02:53:08 +0000 (22:53 -0400)
Convert from <child> elements to <property name="child">
for former GtkBin subclasses. Update test results
to match.

gtk/tools/gtk-builder-tool-simplify.c
testsuite/tools/simplify-data-3to4/grid.expected
testsuite/tools/simplify-data-3to4/notebook.expected
testsuite/tools/simplify-data-3to4/office-runner.expected
testsuite/tools/simplify-data-3to4/stack.expected

index 9d96c85e096c8e24d38d4a741f77eca596ce9e24..af9d902f3f4b67bae429bd8b8e27466da4c275c2 100644 (file)
@@ -1491,6 +1491,56 @@ rewrite_grid_layout (Element *element,
     }
 }
 
+static void
+rewrite_bin_child (Element      *element,
+                   MyParserData *data)
+{
+  GList *l, *ll;
+  const char *class_name;
+  GType type;
+
+  for (l = element->children; l; l = l->next)
+    {
+      Element *child = l->data;
+      Element *object = NULL;
+
+      if (!g_str_equal (child->element_name, "child") ||
+          has_attribute (child, "type", NULL))
+        continue;
+
+      for (ll = child->children; ll; ll = ll->next)
+        {
+          Element *elem = ll->data;
+
+          if (!g_str_equal (elem->element_name, "object"))
+            continue;
+
+          class_name = get_attribute_value (elem, "class");
+          if (!class_name)
+            continue;
+
+          type = g_type_from_name (class_name);
+          if (!g_type_is_a (type, GTK_TYPE_WIDGET))
+            continue;
+
+          object = elem;
+        }
+
+      if (object)
+        {
+          g_free (child->element_name);
+          g_strfreev (child->attribute_names);
+          g_strfreev (child->attribute_values);
+          child->element_name = g_strdup ("property");
+          child->attribute_names = g_new0 (char *, 2);
+          child->attribute_names[0] = g_strdup ("name");
+          child->attribute_values = g_new0 (char *, 2);
+          child->attribute_values[0] = g_strdup ("child");
+          break;
+        }
+    }
+}
+
 /* returns TRUE to remove the element from the parent */
 static gboolean
 simplify_element (Element      *element,
@@ -1605,6 +1655,23 @@ rewrite_element (Element      *element,
       g_str_equal (get_class_name (element), "GtkFixed"))
     rewrite_layout_props (element, data);
 
+  if (element_is_object_or_template (element) &&
+      (g_str_equal (get_class_name (element), "GtkAspectFrame") ||
+       g_str_equal (get_class_name (element), "GtkComboBox") ||
+       g_str_equal (get_class_name (element), "GtkComboBoxText") ||
+       g_str_equal (get_class_name (element), "GtkFlowBoxChild") ||
+       g_str_equal (get_class_name (element), "GtkFrame") ||
+       g_str_equal (get_class_name (element), "GtkListBoxRow") ||
+       g_str_equal (get_class_name (element), "GtkOverlay") ||
+       g_str_equal (get_class_name (element), "GtkPopover") ||
+       g_str_equal (get_class_name (element), "GtkPopoverMenu") ||
+       g_str_equal (get_class_name (element), "GtkRevealer") ||
+       g_str_equal (get_class_name (element), "GtkScrolledWindow") ||
+       g_str_equal (get_class_name (element), "GtkSearchBar") ||
+       g_str_equal (get_class_name (element), "GtkViewport") ||
+       g_str_equal (get_class_name (element), "GtkWindow")))
+    rewrite_bin_child (element, data);
+
   if (g_str_equal (element->element_name, "property"))
     maybe_rename_property (element, data);
 
index 61989d49f853d229ea7b418e5329d28d37c536e2..5005cc0725848af9a45172c3afb6c5e7dab08674 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <object class="GtkWindow" id="window1">
-    <child>
+    <property name="child">
       <object class="GtkGrid" id="grid1">
         <child>
           <object class="GtkToggleButton" id="button1">
           </object>
         </child>
       </object>
-    </child>
+    </property>
   </object>
 </interface>
index c0f84f57f23717da5b4da43bb949f83b2f32604a..f0bc7f9e82eb391ed3ac6b337e3305dfebbb1a30 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <object class="GtkWindow" id="window1">
-    <child>
+    <property name="child">
       <object class="GtkNotebook" id="notebook1">
         <child>
           <object class="GtkNotebookPage">
@@ -32,6 +32,6 @@
           </object>
         </child>
       </object>
-    </child>
+    </property>
   </object>
 </interface>
index 9c0189733d3b78083dee1e07bb8fdf720795b88e..11131a71e5751bd02a4c2d6970b48f52efea7787 100644 (file)
@@ -5,7 +5,7 @@
     <property name="title" translatable="yes">Office Runner</property>
     <property name="resizable">0</property>
     <property name="window_position">center</property>
-    <child>
+    <property name="child">
       <object class="GtkBox" id="box1">
         <property name="margin-start">12</property>
         <property name="margin-end">12</property>
           </packing>
         </child>
       </object>
-    </child>
+    </property>
   </object>
 </interface>
index 1c5c0beb56404e2aa5175cf760e585d99c5a1e7f..611d20edf87d14d67f3e0caf074eccc4dedc9021 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <object class="GtkWindow" id="window1">
-    <child>
+    <property name="child">
       <object class="GtkBox" id="box1">
         <child>
           <object class="GtkStackSwitcher" id="stackswitcher1">
@@ -39,6 +39,6 @@
           </object>
         </child>
       </object>
-    </child>
+    </property>
   </object>
 </interface>